package malagaAcoge.controller.daos;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.Query;

import malagaAcoge.model.entities.Abogado;
import malagaAcoge.model.entities.Tecnico;
import malagaAcoge.utils.JPAUtils;

public class TecnicoDao {
	private static JPAUtils jpaUtils;
	protected static EntityManager em;

	public TecnicoDao() {
		jpaUtils = new JPAUtils();

	}

	public static Tecnico findTecnico(int id) {
		Tecnico tecnico = null;
		try {
			em = jpaUtils.getEntityManager();
			tecnico = (Tecnico) em.find(Tecnico.class, id);
		} catch (Exception e) {
			System.out.println("Error en metodo findTecnico");
			e.printStackTrace();
		} finally {
			em.close();
		}
		return tecnico;

	}

	@SuppressWarnings("unchecked")
	public static List<Tecnico> findAll() {
		List<Tecnico> tecnicos = new ArrayList<Tecnico>();
		try {
			em = jpaUtils.getEntityManager();
			Query q = em.createQuery("select t from Tecnico t");
			tecnicos = q.getResultList();
		} catch (Exception e) {
			System.out.println("Error en metodo findAllTecnico");
			e.printStackTrace();
		} finally {
			em.close();
		}
		return tecnicos;

	}

	public static Tecnico findTecnicoByAccessData(String usuario, String pass) {
		Tecnico tecnico = null;
		try {
			em = jpaUtils.getEntityManager();
			tecnico = (Tecnico) em
					.createQuery(
							"SELECT OBJECT(Tecnico) FROM Tecnico tecnico WHERE tecnico.nombreUsuario = :usuario AND tecnico.contrasena =:pass")
					.setParameter("usuario", usuario)
					.setParameter("pass", pass).getSingleResult();

		} catch (NoResultException e) {
			System.out.println("No result.");

		} catch (Exception e) {
			System.out.println("Error en metodo findTecnicoByAccessData");
			e.printStackTrace();
		} finally {
			em.close();
		}
		return tecnico;

	}

	public static void createTecnico(Tecnico tecnico) {
		try {
			em = jpaUtils.getEntityManager();
			em.getTransaction().begin();
			em.persist(tecnico);
			em.getTransaction().commit();
		} catch (Exception e) {
			System.out.println("Error en metodo createTecnico:");
			e.printStackTrace();
		} finally {
			em.close();
		}

	}

	public static void updateTecnico(Tecnico tecnico) {
		try {
			em = jpaUtils.getEntityManager();
			em.getTransaction().begin();
			em.merge(tecnico);
			em.getTransaction().commit();
		} catch (Exception e) {
			System.out.println("Error en metodo updateTecnico:");
			e.printStackTrace();
		} finally {
			em.close();
		}
	}

	public static void deleteTecnico(int idTecnico) {
		try {
			em = jpaUtils.getEntityManager();
			Tecnico tecnico = em.find(Tecnico.class, idTecnico);
			if (tecnico != null) {
				em.getTransaction().begin();
				em.remove(tecnico);
				em.getTransaction().commit();
			}
		} catch (Exception e) {
			System.out.println("Error en metodo updateTecnico:");
			e.printStackTrace();
		} finally {
			em.close();
		}
	}

	public static JPAUtils getJpaUtils() {
		return jpaUtils;
	}

	public static void mergeTecnico(Tecnico t) {
		try {
			em = jpaUtils.getEntityManager();
			em.getTransaction().begin();
			em.merge(t);
			em.getTransaction().commit();
		} catch (Exception e) {
			System.out.println("Error en metodo updateTecnico:");
			e.printStackTrace();
		} finally {
			em.close();
		}

	}

}
